home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 1999 August / SGI Freeware 1999 August.iso / dist / fw_emacs.idb / usr / freeware / share / emacs / 19.34 / lisp / makesum.el.z / makesum.el
Encoding:
Text File  |  1998-10-28  |  3.6 KB  |  115 lines

  1. ;;; makesum.el --- generate key binding summary for Emacs
  2.  
  3. ;; Copyright (C) 1985 Free Software Foundation, Inc.
  4.  
  5. ;; Maintainer: FSF
  6. ;; Keywords: help
  7.  
  8. ;; This file is part of GNU Emacs.
  9.  
  10. ;; GNU Emacs is free software; you can redistribute it and/or modify
  11. ;; it under the terms of the GNU General Public License as published by
  12. ;; the Free Software Foundation; either version 2, or (at your option)
  13. ;; any later version.
  14.  
  15. ;; GNU Emacs is distributed in the hope that it will be useful,
  16. ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18. ;; GNU General Public License for more details.
  19.  
  20. ;; You should have received a copy of the GNU General Public License
  21. ;; along with GNU Emacs; see the file COPYING.  If not, write to the
  22. ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  23. ;; Boston, MA 02111-1307, USA.
  24.  
  25. ;;; Commentary:
  26.  
  27. ;; Displays a nice human-readable summary of all keybindings in a
  28. ;; two-column format.
  29.  
  30. ;;; Code:
  31.  
  32. ;;;###autoload
  33. (defun make-command-summary ()
  34.   "Make a summary of current key bindings in the buffer *Summary*.
  35. Previous contents of that buffer are killed first."
  36.   (interactive)
  37.   (message "Making command summary...")
  38.   ;; This puts a description of bindings in a buffer called *Help*.
  39.   (save-window-excursion
  40.    (describe-bindings))
  41.   (with-output-to-temp-buffer "*Summary*"
  42.     (save-excursion
  43.      (let ((cur-mode mode-name))
  44.        (set-buffer standard-output)
  45.        (erase-buffer)
  46.        (insert-buffer-substring "*Help*")
  47.        (goto-char (point-min))
  48.        (delete-region (point) (progn (forward-line 1) (point)))
  49.        (while (search-forward "         " nil t)
  50.      (replace-match "  "))
  51.        (goto-char (point-min))
  52.        (while (search-forward "-@ " nil t)
  53.      (replace-match "-SP"))
  54.        (goto-char (point-min))
  55.        (while (search-forward "  .. ~ " nil t)
  56.      (replace-match "SP .. ~"))
  57.        (goto-char (point-min))
  58.        (while (search-forward "C-?" nil t)
  59.      (replace-match "DEL"))
  60.        (goto-char (point-min))
  61.        (while (search-forward "C-i" nil t)
  62.      (replace-match "TAB"))
  63.        (goto-char (point-min))
  64.        (if (re-search-forward "^Local Bindings:" nil t)
  65.        (progn
  66.         (forward-char -1)
  67.         (insert " for " cur-mode " Mode")
  68.         (while (search-forward "??\n" nil t)
  69.           (delete-region (point)
  70.                  (progn
  71.                   (forward-line -1)
  72.                   (point))))))
  73.        (goto-char (point-min))
  74.        (insert "Emacs command summary, " (substring (current-time-string) 0 10)
  75.            ".\n")
  76.        ;; Delete "key    binding" and underlining of dashes.
  77.        (delete-region (point) (progn (forward-line 2) (point)))
  78.        (forward-line 1)            ;Skip blank line
  79.        (while (not (eobp))
  80.      (let ((beg (point)))
  81.        (or (re-search-forward "^$" nil t)
  82.            (goto-char (point-max)))
  83.        (double-column beg (point))
  84.        (forward-line 1)))
  85.        (goto-char (point-min)))))
  86.   (message "Making command summary...done"))
  87.  
  88. (defun double-column (start end)
  89.   (interactive "r")
  90.   (let (half cnt
  91.         line lines nlines
  92.     (from-end (- (point-max) end)))
  93.     (setq nlines (count-lines start end))
  94.     (if (<= nlines 1)
  95.     nil
  96.       (setq half (/ (1+ nlines) 2))
  97.       (goto-char start)
  98.       (save-excursion
  99.        (forward-line half)
  100.        (while (< half nlines)
  101.      (setq half (1+ half))
  102.      (setq line (buffer-substring (point) (save-excursion (end-of-line) (point))))
  103.      (setq lines (cons line lines))
  104.      (delete-region (point) (progn (forward-line 1) (point)))))
  105.       (setq lines (nreverse lines))
  106.       (while lines
  107.     (end-of-line)
  108.     (indent-to 41)
  109.     (insert (car lines))
  110.     (forward-line 1)
  111.     (setq lines (cdr lines))))
  112.     (goto-char (- (point-max) from-end))))
  113.  
  114. ;;; makesum.el ends here
  115.